#!/bin/bash
swap_size=$(free -h |grep Swap | awk '{print $2}')
if [[ ${swap_size} == "0B" ]]; then
    exit 1;
fi
{
# 执行这行命令需要存在'myzabbix'用户,密码为'myzabbix',而且 /home/myzabbix 目录中要存在.toprc文件
lld_swap_tmp="$(echo "myzabbix" |su -c"top -b -n1 |head -12|grep -Ev 'COMMAND|^$'" - myzabbix)" # echo 'myzabbix'给后面的su命令提供了登录密码
if false; then                          # 上面的top命令会返回10行结果，类似于下面这样
  1012 mysql      0.0 15.0 164496 mariadbd
  1394 root       0.0  0.2  11716 rasp-heartbeat
   851 root       0.0  0.0  10868 tuned
  1230 root       0.0  0.2   6924 snmptrapd
  1605 apache     0.0  2.0   6188 php-fpm
 26635 apache     0.0  2.0   6000 php-fpm
 89390 apache     0.0  2.0   5960 php-fpm
  1365 apache     0.0  2.0   5944 php-fpm
   583 polkitd    0.0  0.1   5824 polkitd
  1356 apache     0.0  0.0   5688 php-fpm
fi
lld_swap_log=/home/myzabbix/zabbix.lld.swap.log
echo "${lld_swap_tmp}" |awk '{
F[NR,1]=$5;                     # 第5列:swap使用量. CentOS7的单位总是KB，SUSE11智能显示单位,如2.5g,30m
F[NR,2]=$1;                     # 第1列:PID
F[NR,3]=$6;                     # 第6列:命令名
B[$6]++}END{                    # B数组:有没有重复的命令名
for (i=1; i<11; i++) {
    for (j in B) {
        if (j==F[i,3])
            if (B[j]>1) print F[i,1],F[i,2]"_"F[i,3]; else print F[i,1],F[i,3]
        }
    }
}' > ${lld_swap_log}

originData="$(awk '{p[$NF]++}END{
for (i in p) print "{\"{#SWAPTOP}\":\""i"\"}";
}' ${lld_swap_log})"
} &> /dev/null
# 生成Json格式      # 若不加引号，即echo ${originData}，会把<newline>替换成<space>
echo "[`echo ${originData}|sed 's/ /,/g'`]"